🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / .specify / extensions / agent-governance / scripts / refresh_agent_governance.py
Displaying Raw • Download
.specify/extensions/agent-governance/scripts/refresh_agent_governance.py 228fa8a368d478a9a244da2eebaef812ae724df5 (228fa8a3) Text, 24.74 KB
T8b949e#!/usr/bin/env python3
T8b949e"""Generate or refresh Spec Kit agent platform governance for the current project."""
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787json
Tff7b72import T7ee787re
Tff7b72import T7ee787sys
Tff7b72from T7ee787pathlib Tff7b72import Te6edf3Path
Tff7b72from T7ee787typing Tff7b72import Te6edf3Any
Te6edf3MEMORY_PATH Tff7b72= Te6edf3PathTb4b4b4(Ta5d6ff"Ta5d6ff.specify/memory/agent-governance.mdTa5d6ff"Tb4b4b4)
Te6edf3TEMPLATE_PATH Tff7b72= Te6edf3PathTb4b4b4(Ta5d6ff"Ta5d6ff.specify/extensions/agent-governance/templates/agent-governance-template.mdTa5d6ff"Tb4b4b4)
Te6edf3INTEGRATION_JSON Tff7b72= Te6edf3PathTb4b4b4(Ta5d6ff"Ta5d6ff.specify/integration.jsonTa5d6ff"Tb4b4b4)
Te6edf3INIT_OPTIONS_JSON Tff7b72= Te6edf3PathTb4b4b4(Ta5d6ff"Ta5d6ff.specify/init-options.jsonTa5d6ff"Tb4b4b4)
Te6edf3MARKER_START Tff7b72= Ta5d6ff"Ta5d6ff<!-- SPECKIT GOVERNANCE START -->Ta5d6ff"
Te6edf3MARKER_END Tff7b72= Ta5d6ff"Ta5d6ff<!-- SPECKIT GOVERNANCE END -->Ta5d6ff"
Te6edf3CONTEXT_FILES Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffagyTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffAGENTS.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffampTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffAGENTS.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffauggieTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff.augment/rules/specify-rules.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbobTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffAGENTS.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffclaudeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffCLAUDE.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffcodebuddyTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffCODEBUDDY.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffcodexTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffAGENTS.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffcopilotTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff.github/copilot-instructions.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffcursor-agentTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff.cursor/rules/specify-rules.mdcTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdevinTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffAGENTS.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffforgeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffAGENTS.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffgeminiTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffGEMINI.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffgenericTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffAGENTS.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffgooseTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffAGENTS.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffiflowTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffIFLOW.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffjunieTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff.junie/AGENTS.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffkilocodeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff.kilocode/rules/specify-rules.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffkimiTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffKIMI.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffkiro-cliTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffAGENTS.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fflingmaTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff.lingma/rules/specify-rules.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffopencodeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffAGENTS.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffpiTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffAGENTS.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffqodercliTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffQODER.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffqwenTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffQWEN.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffrooTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff.roo/rules/specify-rules.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffshaiTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSHAI.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftabnineTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffTABNINE.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftraeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff.trae/rules/project_rules.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffvibeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffAGENTS.mdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffwindsurfTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff.windsurf/rules/specify-rules.mdTa5d6ff"Tb4b4b4,
Tb4b4b4}
Tff7b72def Td2a8ffmainTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657intTb4b4b4:
Te6edf3root Tff7b72= Te6edf3PathTff7b72.Td2a8ffcwdTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Tb4b4b4(Te6edf3root Tff7b72/ Ta5d6ff"Ta5d6ff.specifyTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffis_dirTb4b4b4(Tb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffError: .specify/ not found. Run from a Spec Kit project root.Ta5d6ff"Tb4b4b4, Te6edf3fileTff7b72=Te6edf3sysTff7b72.Td2a8ffstderrTb4b4b4)
Tff7b72return T79c0ff1
Te6edf3state Tff7b72= Te6edf3read_jsonTb4b4b4(Te6edf3root Tff7b72/ Te6edf3INTEGRATION_JSONTb4b4b4)
Te6edf3init_options Tff7b72= Te6edf3read_jsonTb4b4b4(Te6edf3root Tff7b72/ Te6edf3INIT_OPTIONS_JSONTb4b4b4)
Te6edf3created_memory Tff7b72= Te6edf3ensure_memoryTb4b4b4(Te6edf3rootTb4b4b4)
Te6edf3target Tff7b72= Te6edf3resolve_targetTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3stateTb4b4b4, Te6edf3init_optionsTb4b4b4)
Te6edf3projection Tff7b72= Te6edf3render_projectionTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3targetTb4b4b4, Te6edf3stateTb4b4b4, Te6edf3created_memoryTb4b4b4)
Te6edf3evidence_summary Tff7b72= Te6edf3repository_evidence_summaryTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3stateTb4b4b4, Te6edf3init_optionsTb4b4b4) Tff7b72if Te6edf3created_memory Tff7b72else Ta5d6ff"Ta5d6ff"
Te6edf3action Tff7b72= Te6edf3write_projectionTb4b4b4(Te6edf3targetTb4b4b4, Te6edf3projectionTb4b4b4)
Te6edf3remove_stale_sectionsTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3targetTb4b4b4, Te6edf3init_optionsTb4b4b4, Te6edf3stateTb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffTarget governance file: Tffd700{Te6edf3relTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3targetTb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffGovernance file: Tffd700{Te6edf3actionTffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffReview target: Tffd700{Te6edf3relTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3targetTb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffInternal initialization cache: Tffd700{Te6edf3MEMORY_PATHTff7b72.Td2a8ffas_posixTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff (Tffd700{Ta5d6ff'Ta5d6ffcreatedTa5d6ff' Tff7b72if Te6edf3created_memory Tff7b72else Ta5d6ff'Ta5d6ffexistingTa5d6ff'Tffd700}Ta5d6ff)Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3created_memoryTb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffRepository evidence: Tffd700{Te6edf3evidence_summaryTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72return T79c0ff0
Tff7b72def Td2a8ffensure_memoryTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3memory Tff7b72= Te6edf3root Tff7b72/ Te6edf3MEMORY_PATH
Tff7b72if Te6edf3memoryTff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Te6edf3template Tff7b72= Te6edf3root Tff7b72/ Te6edf3TEMPLATE_PATH
Tff7b72if Tff7b72not Te6edf3templateTff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149SystemExitTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffError: template not found: Tffd700{Te6edf3TEMPLATE_PATHTff7b72.Td2a8ffas_posixTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4)
Te6edf3memoryTff7b72.Td2a8ffparentTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3memoryTff7b72.Td2a8ffwrite_textTb4b4b4(Te6edf3render_initial_memoryTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3templateTff7b72.Td2a8ffread_textTb4b4b4(Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8-sigTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72return Tff7b72True
Tff7b72def Td2a8ffrender_initial_memoryTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3templateTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3content Tff7b72= Te6edf3normalize_newlinesTb4b4b4(Te6edf3templateTb4b4b4)
Te6edf3state Tff7b72= Te6edf3read_jsonTb4b4b4(Te6edf3root Tff7b72/ Te6edf3INTEGRATION_JSONTb4b4b4)
Te6edf3init_options Tff7b72= Te6edf3read_jsonTb4b4b4(Te6edf3root Tff7b72/ Te6edf3INIT_OPTIONS_JSONTb4b4b4)
Te6edf3content Tff7b72= Te6edf3replace_sync_reportTb4b4b4(Te6edf3contentTb4b4b4, Te6edf3rootTb4b4b4, Te6edf3stateTb4b4b4)
Te6edf3evidence Tff7b72= Ta5d6ff"Tffea00\nTa5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(
Tb4b4b4[
Ta5d6ff"Ta5d6ff## Repository EvidenceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tff7b72*Te6edf3repository_evidence_linesTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3stateTb4b4b4, Te6edf3init_optionsTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff## Repository AreasTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tff7b72*Te6edf3repository_area_linesTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff## Development CommandsTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tff7b72*Te6edf3development_command_linesTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tb4b4b4]
Tb4b4b4)
Te6edf3marker Tff7b72= Ta5d6ff"Tffea00\nTa5d6ff## ScopeTffea00\nTa5d6ff"
Tff7b72if Te6edf3marker Tff7b72in Te6edf3contentTb4b4b4:
Te6edf3content Tff7b72= Te6edf3contentTff7b72.Td2a8ffreplaceTb4b4b4(Te6edf3markerTb4b4b4, Ta5d6fffTa5d6ff"Tffea00\nTffd700{Te6edf3evidenceTffd700}Tffd700{Te6edf3markerTffd700}Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3content Tff7b72= Te6edf3contentTff7b72.Td2a8ffrstripTb4b4b4(Tb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTffea00\nTa5d6ff" Tff7b72+ Te6edf3evidence
Tff7b72return Te6edf3content
Tff7b72def Td2a8ffreplace_sync_reportTb4b4b4(Te6edf3contentTb4b4b4: Tffa657strTb4b4b4, Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3stateTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3report Tff7b72= Ta5d6ff"Tffea00\nTa5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(
Tb4b4b4[
Ta5d6ff"Ta5d6ff<!--Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffSync Impact ReportTa5d6ff"Tb4b4b4,
Ta5d6fffTa5d6ff"Ta5d6ff- Active Integration: Tffd700{Te6edf3default_integrationTb4b4b4(Te6edf3stateTb4b4b4) Tff7b72or Ta5d6ff'Ta5d6ffunknownTa5d6ff'Tffd700}Ta5d6ff"Tb4b4b4,
Ta5d6fffTa5d6ff"Ta5d6ff- Installed Integrations: Tffd700{Ta5d6ff'Ta5d6ff, Ta5d6ff'Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3installed_integrationsTb4b4b4(Te6edf3stateTb4b4b4)Tb4b4b4) Tff7b72or Ta5d6ff'Ta5d6ffnoneTa5d6ff'Tffd700}Ta5d6ff"Tb4b4b4,
Ta5d6fffTa5d6ff"Ta5d6ff- Skills Scanned: Tffd700{Tffa657lenTb4b4b4(Te6edf3scan_skillsTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4,
Ta5d6fffTa5d6ff"Ta5d6ff- MCP Config Files Scanned: Tffd700{Ta5d6ff'Ta5d6ff, Ta5d6ff'Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3scan_mcp_configsTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4) Tff7b72or Ta5d6ff'Ta5d6ffnoneTa5d6ff'Tffd700}Ta5d6ff"Tb4b4b4,
Ta5d6fffTa5d6ff"Ta5d6ff- Extension Config Status: .specify/extensions.yml (Tffd700{Te6edf3extensions_statusTb4b4b4(Te6edf3rootTb4b4b4)Tffd700}Ta5d6ff)Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Sections Changed: initialized repository evidence and development commandsTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Flow: generate missing target governance files; update existing target governance filesTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff-->Ta5d6ff"Tb4b4b4,
Tb4b4b4]
Tb4b4b4)
Te6edf3pattern Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff<!--Ta5d6ff\Ta5d6ffnSync Impact ReportTa5d6ff\Ta5d6ffn.*?Ta5d6ff\Ta5d6ffn-->Ta5d6ff"Tb4b4b4, Te6edf3reTff7b72.Td2a8ffDOTALLTb4b4b4)
Tff7b72if Te6edf3patternTff7b72.Td2a8ffsearchTb4b4b4(Te6edf3contentTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3patternTff7b72.Td2a8ffsubTb4b4b4(Te6edf3reportTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3countTff7b72=T79c0ff1Tb4b4b4)
Tff7b72return Te6edf3content
Tff7b72def Td2a8ffrepository_evidence_summaryTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3stateTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4, Te6edf3init_optionsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3evidence Tff7b72= Te6edf3repository_evidence_linesTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3stateTb4b4b4, Te6edf3init_optionsTb4b4b4)
Te6edf3detected Tff7b72= Tb4b4b4[Te6edf3line Tff7b72for Te6edf3line Tff7b72in Te6edf3evidence Tff7b72if Ta5d6ff"Ta5d6ffnone detectedTa5d6ff" Tff7b72not Tff7b72in Te6edf3line Tff7b72and Ta5d6ff"Ta5d6ff`unknown`Ta5d6ff" Tff7b72not Tff7b72in Te6edf3lineTb4b4b4]
Tff7b72return Ta5d6ff"Ta5d6ff; Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3lineTff7b72.Td2a8ffremoveprefixTb4b4b4(Ta5d6ff"Ta5d6ff- Ta5d6ff"Tb4b4b4) Tff7b72for Te6edf3line Tff7b72in Te6edf3detectedTb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffnone detectedTa5d6ff"
Tff7b72def Td2a8ffrepository_evidence_linesTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3stateTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4, Te6edf3init_optionsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3lines Tff7b72= Tb4b4b4[
Te6edf3evidence_lineTb4b4b4(Ta5d6ff"Ta5d6ffREADMETa5d6ff"Tb4b4b4, Te6edf3existing_pathsTb4b4b4(Te6edf3rootTb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6ffREADME.mdTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffREADME.markdownTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffREADME.txtTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3evidence_lineTb4b4b4(
Ta5d6ff"Ta5d6ffPackage manifestTa5d6ff"Tb4b4b4,
Te6edf3existing_pathsTb4b4b4(Te6edf3rootTb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6ffpackage.jsonTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpyproject.tomlTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCargo.tomlTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffgo.modTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffGemfileTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpom.xmlTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbuild.gradleTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbuild.gradle.ktsTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3evidence_lineTb4b4b4(
Ta5d6ff"Ta5d6ffLockfilesTa5d6ff"Tb4b4b4,
Te6edf3existing_pathsTb4b4b4(Te6edf3rootTb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6ffpackage-lock.jsonTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpnpm-lock.yamlTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffyarn.lockTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffuv.lockTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpoetry.lockTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCargo.lockTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffgo.sumTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffGemfile.lockTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3evidence_lineTb4b4b4(Ta5d6ff"Ta5d6ffTask runnersTa5d6ff"Tb4b4b4, Te6edf3existing_pathsTb4b4b4(Te6edf3rootTb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6ffMakefileTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffTaskfile.ymlTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffTaskfile.yamlTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffjustfileTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3evidence_lineTb4b4b4(Ta5d6ff"Ta5d6ffCI workflowsTa5d6ff"Tb4b4b4, Te6edf3directory_filesTb4b4b4(Te6edf3rootTb4b4b4, Ta5d6ff"Ta5d6ff.github/workflowsTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3evidence_lineTb4b4b4(Ta5d6ff"Ta5d6ffSource pathsTa5d6ff"Tb4b4b4, Te6edf3existing_dirsTb4b4b4(Te6edf3rootTb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6ffsrcTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffappTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflibTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffscriptsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcommandsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fftemplatesTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3evidence_lineTb4b4b4(Ta5d6ff"Ta5d6ffTest pathsTa5d6ff"Tb4b4b4, Te6edf3existing_dirsTb4b4b4(Te6edf3rootTb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6fftestTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fftestsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffspecTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffspecsTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3evidence_lineTb4b4b4(Ta5d6ff"Ta5d6ffRepository areasTa5d6ff"Tb4b4b4, Te6edf3repository_area_pathsTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3evidence_lineTb4b4b4(Ta5d6ff"Ta5d6ffExisting agent context filesTa5d6ff"Tb4b4b4, Te6edf3existing_context_filesTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3init_optionsTb4b4b4, Te6edf3stateTb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3evidence_lineTb4b4b4(Ta5d6ff"Ta5d6ffRepository-local skillsTa5d6ff"Tb4b4b4, Te6edf3scan_skillsTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3evidence_lineTb4b4b4(Ta5d6ff"Ta5d6ffMCP configsTa5d6ff"Tb4b4b4, Te6edf3scan_mcp_configsTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6fffTa5d6ff"Ta5d6ff- Active integration: `Tffd700{Te6edf3default_integrationTb4b4b4(Te6edf3stateTb4b4b4) Tff7b72or Ta5d6ff'Ta5d6ffunknownTa5d6ff'Tffd700}Ta5d6ff`Ta5d6ff"Tb4b4b4,
Ta5d6fffTa5d6ff"Ta5d6ff- Resolved context file: `Tffd700{Te6edf3relTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3resolve_targetTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3stateTb4b4b4, Te6edf3init_optionsTb4b4b4)Tb4b4b4)Tffd700}Ta5d6ff`Ta5d6ff"Tb4b4b4,
Tb4b4b4]
Tff7b72return Te6edf3lines
Tff7b72def Td2a8ffevidence_lineTb4b4b4(Te6edf3labelTb4b4b4: Tffa657strTb4b4b4, Te6edf3valuesTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Ta5d6fffTa5d6ff"Ta5d6ff- Tffd700{Te6edf3labelTffd700}Ta5d6ff: Tffd700{Te6edf3format_valuesTb4b4b4(Te6edf3valuesTb4b4b4)Tffd700}Ta5d6ff"
Tff7b72def Td2a8ffformat_valuesTb4b4b4(Te6edf3valuesTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff, Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff`Tffd700{Te6edf3valueTffd700}Ta5d6ff`Ta5d6ff" Tff7b72for Te6edf3value Tff7b72in Te6edf3valuesTb4b4b4) Tff7b72if Te6edf3values Tff7b72else Ta5d6ff"Ta5d6ffnone detectedTa5d6ff"
Tff7b72def Td2a8ffexisting_pathsTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3namesTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Tff7b72return Tb4b4b4[Te6edf3name Tff7b72for Te6edf3name Tff7b72in Te6edf3names Tff7b72if Tb4b4b4(Te6edf3root Tff7b72/ Te6edf3nameTb4b4b4)Tff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4)Tb4b4b4]
Tff7b72def Td2a8ffexisting_dirsTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3namesTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Tff7b72return Tb4b4b4[Ta5d6fffTa5d6ff"Tffd700{Te6edf3nameTffd700}Ta5d6ff/Ta5d6ff" Tff7b72for Te6edf3name Tff7b72in Te6edf3names Tff7b72if Tb4b4b4(Te6edf3root Tff7b72/ Te6edf3nameTb4b4b4)Tff7b72.Td2a8ffis_dirTb4b4b4(Tb4b4b4)Tb4b4b4]
Tff7b72def Td2a8ffdirectory_filesTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3directoryTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3base Tff7b72= Te6edf3root Tff7b72/ Te6edf3directory
Tff7b72if Tff7b72not Te6edf3baseTff7b72.Td2a8ffis_dirTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72return Tffa657sortedTb4b4b4(Te6edf3relTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3pathTb4b4b4) Tff7b72for Te6edf3path Tff7b72in Te6edf3baseTff7b72.Td2a8ffiterdirTb4b4b4(Tb4b4b4) Tff7b72if Te6edf3pathTff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffrepository_area_linesTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3lines Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3area Tff7b72in Te6edf3repository_area_pathsTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4:
Tff7b72if Ta5d6ff"Ta5d6ff/Ta5d6ff" Tff7b72in Te6edf3areaTff7b72.Td2a8ffrstripTb4b4b4(Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3parent Tff7b72= Te6edf3areaTff7b72.Td2a8ffrstripTb4b4b4(Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72+ Ta5d6ff"Ta5d6ff/Ta5d6ff"
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff- `Tffd700{Te6edf3areaTffd700}Ta5d6ff`: change with parent area `Tffd700{Te6edf3parentTffd700}Ta5d6ff`.Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3linesTff7b72.Td2a8ffappendTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff- `Tffd700{Te6edf3areaTffd700}Ta5d6ff`: review before changing linked areas.Ta5d6ff"Tb4b4b4)
Tff7b72return Te6edf3lines Tff7b72or Tb4b4b4[Ta5d6ff"Ta5d6ff- none detectedTa5d6ff"Tb4b4b4]
Tff7b72def Td2a8ffrepository_area_pathsTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3areasTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3path Tff7b72in Tffa657sortedTb4b4b4(Te6edf3rootTff7b72.Td2a8ffiterdirTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3pathTff7b72.Td2a8ffis_dirTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72continue
Te6edf3areasTff7b72.Td2a8ffappendTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3pathTff7b72.Td2a8ffnameTffd700}Ta5d6ff/Ta5d6ff"Tb4b4b4)
Tff7b72for Te6edf3child Tff7b72in Tffa657sortedTb4b4b4(Te6edf3pathTff7b72.Td2a8ffiterdirTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3childTff7b72.Td2a8ffis_dirTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3areasTff7b72.Td2a8ffappendTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3pathTff7b72.Td2a8ffnameTffd700}Ta5d6ff/Tffd700{Te6edf3childTff7b72.Td2a8ffnameTffd700}Ta5d6ff/Ta5d6ff"Tb4b4b4)
Tff7b72return Te6edf3areas
Tff7b72def Td2a8ffexisting_context_filesTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3init_optionsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4, Te6edf3stateTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3pathsTb4b4b4: Tffa657setTb4b4b4[Te6edf3PathTb4b4b4] Tff7b72= Tb4b4b4{Te6edf3root Tff7b72/ Ta5d6ff"Ta5d6ffAGENTS.mdTa5d6ff"Tb4b4b4}
Tff7b72for Te6edf3value Tff7b72in Te6edf3CONTEXT_FILESTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3target Tff7b72= Te6edf3safe_project_pathTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3valueTb4b4b4)
Tff7b72if Te6edf3target Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3pathsTff7b72.Td2a8ffaddTb4b4b4(Te6edf3targetTb4b4b4)
Te6edf3init_target Tff7b72= Te6edf3safe_project_pathTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3init_optionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcontext_fileTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3init_target Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3pathsTff7b72.Td2a8ffaddTb4b4b4(Te6edf3init_targetTb4b4b4)
Te6edf3resolved Tff7b72= Te6edf3resolve_targetTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3stateTb4b4b4, Te6edf3init_optionsTb4b4b4)
Te6edf3pathsTff7b72.Td2a8ffaddTb4b4b4(Te6edf3resolvedTb4b4b4)
Tff7b72return Tffa657sortedTb4b4b4(Te6edf3relTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3pathTb4b4b4) Tff7b72for Te6edf3path Tff7b72in Te6edf3paths Tff7b72if Te6edf3pathTff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffdevelopment_command_linesTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3commands Tff7b72= Te6edf3package_script_linesTb4b4b4(Te6edf3rootTb4b4b4)
Tff7b72if Te6edf3commandsTb4b4b4:
Te6edf3commandsTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ff- manifest commands over ad hoc equivalentsTa5d6ff"Tb4b4b4)
Tff7b72return Te6edf3commands
Tff7b72return Tb4b4b4[Ta5d6ff"Ta5d6ff- none detectedTa5d6ff"Tb4b4b4]
Tff7b72def Td2a8ffpackage_script_linesTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3package_json Tff7b72= Te6edf3root Tff7b72/ Ta5d6ff"Ta5d6ffpackage.jsonTa5d6ff"
Te6edf3data Tff7b72= Te6edf3read_jsonTb4b4b4(Te6edf3package_jsonTb4b4b4)
Te6edf3scripts Tff7b72= Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffscriptsTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3scriptsTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Te6edf3resultTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3name Tff7b72in Tffa657sortedTb4b4b4(Te6edf3scriptsTb4b4b4)Tb4b4b4:
Te6edf3value Tff7b72= Te6edf3scriptsTb4b4b4[Te6edf3nameTb4b4b4]
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3valueTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3valueTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72continue
Te6edf3command Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffnpm Tffd700{Te6edf3nameTffd700}Ta5d6ff" Tff7b72if Te6edf3name Tff7b72in Tb4b4b4{Ta5d6ff"Ta5d6ffstartTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffstopTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fftestTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffrestartTa5d6ff"Tb4b4b4} Tff7b72else Ta5d6fffTa5d6ff"Ta5d6ffnpm run Tffd700{Te6edf3nameTffd700}Ta5d6ff"
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff- `Tffd700{Te6edf3commandTffd700}Ta5d6ff` -> `Tffd700{Te6edf3valueTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff`Ta5d6ff"Tb4b4b4)
Tff7b72return Te6edf3result
Tff7b72def Td2a8ffread_jsonTb4b4b4(Te6edf3pathTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3pathTff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4{Tb4b4b4}
Tff7b72tryTb4b4b4:
Te6edf3data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3pathTff7b72.Td2a8ffread_textTb4b4b4(Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72except Tb4b4b4(Te6edf3jsonTff7b72.Td2a8ffJSONDecodeErrorTb4b4b4, Tf85149OSErrorTb4b4b4, Tf85149UnicodeDecodeErrorTb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4{Tb4b4b4}
Tff7b72return Te6edf3data Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3dataTb4b4b4, Tffa657dictTb4b4b4) Tff7b72else Tb4b4b4{Tb4b4b4}
Tff7b72def Td2a8ffresolve_targetTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3stateTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4, Te6edf3init_optionsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Te6edf3PathTb4b4b4:
Tff7b72for Te6edf3value Tff7b72in Tb4b4b4(
Te6edf3init_optionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcontext_fileTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3CONTEXT_FILESTff7b72.Td2a8ffgetTb4b4b4(Te6edf3default_integrationTb4b4b4(Te6edf3stateTb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffAGENTS.mdTa5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3target Tff7b72= Te6edf3safe_project_pathTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3valueTb4b4b4)
Tff7b72if Te6edf3target Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3target
Tff7b72return Te6edf3root Tff7b72/ Ta5d6ff"Ta5d6ffAGENTS.mdTa5d6ff"
Tff7b72def Td2a8ffsafe_project_pathTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3valueTb4b4b4: Te6edf3AnyTb4b4b4) Tff7b72-Tff7b72> Te6edf3Path Tff7b72| Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3valueTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3valueTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72None
Te6edf3raw Tff7b72= Te6edf3PathTb4b4b4(Te6edf3valueTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3candidate Tff7b72= Te6edf3raw Tff7b72if Te6edf3rawTff7b72.Td2a8ffis_absoluteTb4b4b4(Tb4b4b4) Tff7b72else Te6edf3root Tff7b72/ Te6edf3raw
Tff7b72tryTb4b4b4:
Te6edf3candidateTff7b72.Td2a8ffresolveTb4b4b4(Te6edf3strictTff7b72=Tff7b72FalseTb4b4b4)Tff7b72.Td2a8ffrelative_toTb4b4b4(Te6edf3rootTff7b72.Td2a8ffresolveTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72except Tb4b4b4(Tf85149OSErrorTb4b4b4, Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Te6edf3candidate
Tff7b72def Td2a8ffdefault_integrationTb4b4b4(Te6edf3stateTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657str Tff7b72| Tff7b72NoneTb4b4b4:
Tff7b72for Te6edf3key Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ffdefault_integrationTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffintegrationTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3value Tff7b72= Te6edf3stateTff7b72.Td2a8ffgetTb4b4b4(Te6edf3keyTb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3valueTb4b4b4, Tffa657strTb4b4b4) Tff7b72and Te6edf3valueTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3valueTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Te6edf3installed Tff7b72= Te6edf3stateTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffinstalled_integrationsTa5d6ff"Tb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3installedTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3value Tff7b72in Te6edf3installedTb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3valueTb4b4b4, Tffa657strTb4b4b4) Tff7b72and Te6edf3valueTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3valueTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffinstalled_integrationsTb4b4b4(Te6edf3stateTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3seenTb4b4b4: Tffa657setTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tffa657setTb4b4b4(Tb4b4b4)
Te6edf3values Tff7b72= Te6edf3stateTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffinstalled_integrationsTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3valuesTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Te6edf3values Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3default Tff7b72= Te6edf3default_integrationTb4b4b4(Te6edf3stateTb4b4b4)
Te6edf3ordered Tff7b72= Tb4b4b4(Tb4b4b4[Te6edf3defaultTb4b4b4] Tff7b72if Te6edf3default Tff7b72else Tb4b4b4[Tb4b4b4]Tb4b4b4) Tff7b72+ Te6edf3values
Te6edf3resultTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3value Tff7b72in Te6edf3orderedTb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3valueTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3valueTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72continue
Te6edf3clean Tff7b72= Te6edf3valueTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3clean Tff7b72not Tff7b72in Te6edf3seenTb4b4b4:
Te6edf3seenTff7b72.Td2a8ffaddTb4b4b4(Te6edf3cleanTb4b4b4)
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Te6edf3cleanTb4b4b4)
Tff7b72return Te6edf3result
Tff7b72def Td2a8ffrender_projectionTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3targetTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3stateTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4, Te6edf3created_memoryTb4b4b4: Tffa657boolTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3source_textTb4b4b4, Te6edf3source_label Tff7b72= Te6edf3governance_sourceTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3targetTb4b4b4)
Te6edf3default_key Tff7b72= Te6edf3default_integrationTb4b4b4(Te6edf3stateTb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffunknownTa5d6ff"
Te6edf3installed Tff7b72= Te6edf3installed_integrationsTb4b4b4(Te6edf3stateTb4b4b4)
Te6edf3style Tff7b72= Te6edf3projection_styleTb4b4b4(Te6edf3targetTb4b4b4)
Te6edf3lines Tff7b72= Tb4b4b4[
Te6edf3MARKER_STARTTb4b4b4,
Ta5d6ff"Ta5d6ff## Repository GovernanceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- SSOT: this managed section.Ta5d6ff"Tb4b4b4,
Ta5d6fffTa5d6ff"Ta5d6ff- Target: Tffd700{Te6edf3relTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3targetTb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4,
Ta5d6fffTa5d6ff"Ta5d6ff- Active integration: Tffd700{Te6edf3default_keyTffd700}Ta5d6ff"Tb4b4b4,
Ta5d6fffTa5d6ff"Ta5d6ff- Refresh source: Tffd700{Te6edf3source_labelTffd700}Ta5d6ff"Tb4b4b4,
Ta5d6fffTa5d6ff"Ta5d6ff- Cache: Tffd700{Te6edf3MEMORY_PATHTff7b72.Td2a8ffas_posixTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff (Tffd700{Ta5d6ff'Ta5d6ffcreatedTa5d6ff' Tff7b72if Te6edf3created_memory Tff7b72else Ta5d6ff'Ta5d6ffpresentTa5d6ff'Tffd700}Ta5d6ff)Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff## ScopeTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- agent collaboration rulesTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- tool and MCP permissionsTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- write boundariesTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- skill invocation contractsTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- project governance: externalTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff## ContextTa5d6ff"Tb4b4b4,
Ta5d6fffTa5d6ff"Ta5d6ff- Installed integrations: Tffd700{Ta5d6ff'Ta5d6ff, Ta5d6ff'Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3installedTb4b4b4) Tff7b72if Te6edf3installed Tff7b72else Ta5d6ff'Ta5d6ffnoneTa5d6ff'Tffd700}Ta5d6ff"Tb4b4b4,
Ta5d6fffTa5d6ff"Ta5d6ff- Skills: Tffd700{Ta5d6ff'Ta5d6ff, Ta5d6ff'Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3scan_skillsTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4) Tff7b72or Ta5d6ff'Ta5d6ffnoneTa5d6ff'Tffd700}Ta5d6ff"Tb4b4b4,
Ta5d6fffTa5d6ff"Ta5d6ff- MCP configs: Tffd700{Ta5d6ff'Ta5d6ff, Ta5d6ff'Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3scan_mcp_configsTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4) Tff7b72or Ta5d6ff'Ta5d6ffnoneTa5d6ff'Tffd700}Ta5d6ff"Tb4b4b4,
Ta5d6fffTa5d6ff"Ta5d6ff- Extensions config: .specify/extensions.yml (Tffd700{Te6edf3extensions_statusTb4b4b4(Te6edf3rootTb4b4b4)Tffd700}Ta5d6ff)Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff## Repository EvidenceTa5d6ff"Tb4b4b4,
Tff7b72*Te6edf3section_or_defaultTb4b4b4(Te6edf3source_textTb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6ff## Repository EvidenceTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3repository_evidence_defaultTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff## Repository AreasTa5d6ff"Tb4b4b4,
Tff7b72*Te6edf3section_or_defaultTb4b4b4(Te6edf3source_textTb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6ff## Repository AreasTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3repository_areas_defaultTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff## Directory GovernanceTa5d6ff"Tb4b4b4,
Tff7b72*Te6edf3section_or_defaultTb4b4b4(Te6edf3source_textTb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6ff## Directory GovernanceTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3directory_governance_defaultTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff## Development CommandsTa5d6ff"Tb4b4b4,
Tff7b72*Te6edf3section_or_defaultTb4b4b4(Te6edf3source_textTb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6ff## Development CommandsTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3development_commands_defaultTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff## AuthorityTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff1. Current user instructionTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff2. Active `SPECKIT GOVERNANCE` sectionTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff3. User-authored repository instructions for agent behaviorTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff4. Skill-local `SKILL.md`Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff5. Tool and MCP defaultsTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff## Repository WorkflowTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Read: Repository EvidenceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Run: Development CommandsTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Scope: active task onlyTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Preserve: user-authored editsTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Protected files: implementation, CI, MCP config, secrets, permissions, tool settingsTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Protected-file writes: explicit user request onlyTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- External writes: authorized target and action onlyTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Handoff: changed files, commands, validation, risksTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff## Write BoundariesTa5d6ff"Tb4b4b4,
Tff7b72*Te6edf3section_or_defaultTb4b4b4(Te6edf3source_textTb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6ff## Write BoundariesTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3write_boundary_defaultTb4b4b4(Te6edf3styleTb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff## MCP And External ToolsTa5d6ff"Tb4b4b4,
Tff7b72*Te6edf3section_or_defaultTb4b4b4(Te6edf3source_textTb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6ff## MCP And External ToolsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff## MCP And External Tool PolicyTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff## MCP PolicyTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3mcp_defaultTb4b4b4(Te6edf3styleTb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff## SkillsTa5d6ff"Tb4b4b4,
Tff7b72*Te6edf3section_or_defaultTb4b4b4(Te6edf3source_textTb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6ff## SkillsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff## Skill Usage PolicyTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff## Skill ContractTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3skill_defaultTb4b4b4(Te6edf3styleTb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff## HandoffTa5d6ff"Tb4b4b4,
Tff7b72*Te6edf3section_or_defaultTb4b4b4(Te6edf3source_textTb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6ff## HandoffTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff## Required Handoff ReportTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff## ValidationTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3handoff_defaultTb4b4b4(Te6edf3styleTb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3MARKER_ENDTb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tb4b4b4]
Tff7b72return Ta5d6ff"Tffea00\nTa5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3linesTb4b4b4)
Tff7b72def Td2a8ffwrite_projectionTb4b4b4(Te6edf3targetTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3projectionTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3existed Tff7b72= Te6edf3targetTff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4)
Te6edf3existing Tff7b72= Te6edf3targetTff7b72.Td2a8ffread_textTb4b4b4(Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8-sigTa5d6ff"Tb4b4b4) Tff7b72if Te6edf3targetTff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4) Tff7b72else Ta5d6ff"Ta5d6ff"
Te6edf3updated Tff7b72= Te6edf3upsert_sectionTb4b4b4(Te6edf3existingTb4b4b4, Te6edf3projectionTb4b4b4)
Tff7b72if Te6edf3targetTff7b72.Td2a8ffsuffix Tff7b72== Ta5d6ff"Ta5d6ff.mdcTa5d6ff"Tb4b4b4:
Te6edf3updated Tff7b72= Te6edf3ensure_mdc_frontmatterTb4b4b4(Te6edf3updatedTb4b4b4)
Te6edf3targetTff7b72.Td2a8ffparentTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3targetTff7b72.Td2a8ffwrite_textTb4b4b4(Te6edf3normalize_newlinesTb4b4b4(Te6edf3updatedTb4b4b4)Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffupdatedTa5d6ff" Tff7b72if Te6edf3existed Tff7b72else Ta5d6ff"Ta5d6ffgeneratedTa5d6ff"
Tff7b72def Td2a8ffupsert_sectionTb4b4b4(Te6edf3contentTb4b4b4: Tffa657strTb4b4b4, Te6edf3projectionTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3start Tff7b72= Te6edf3contentTff7b72.Td2a8fffindTb4b4b4(Te6edf3MARKER_STARTTb4b4b4)
Te6edf3end Tff7b72= Te6edf3contentTff7b72.Td2a8fffindTb4b4b4(Te6edf3MARKER_ENDTb4b4b4, Te6edf3start Tff7b72if Te6edf3start Tff7b72!= Tff7b72-T79c0ff1 Tff7b72else T79c0ff0Tb4b4b4)
Tff7b72if Te6edf3start Tff7b72!= Tff7b72-T79c0ff1 Tff7b72and Te6edf3end Tff7b72!= Tff7b72-T79c0ff1 Tff7b72and Te6edf3end Tff7b72> Te6edf3startTb4b4b4:
Te6edf3end Tff7b72+Tff7b72= Tffa657lenTb4b4b4(Te6edf3MARKER_ENDTb4b4b4)
Tff7b72if Te6edf3end Tff7b72< Tffa657lenTb4b4b4(Te6edf3contentTb4b4b4) Tff7b72and Te6edf3contentTb4b4b4[Te6edf3endTb4b4b4] Tff7b72== Ta5d6ff"Tffea00\rTa5d6ff"Tb4b4b4:
Te6edf3end Tff7b72+Tff7b72= T79c0ff1
Tff7b72if Te6edf3end Tff7b72< Tffa657lenTb4b4b4(Te6edf3contentTb4b4b4) Tff7b72and Te6edf3contentTb4b4b4[Te6edf3endTb4b4b4] Tff7b72== Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4:
Te6edf3end Tff7b72+Tff7b72= T79c0ff1
Tff7b72return Te6edf3contentTb4b4b4[Tb4b4b4:Te6edf3startTb4b4b4] Tff7b72+ Te6edf3projection Tff7b72+ Te6edf3contentTb4b4b4[Te6edf3endTb4b4b4:Tb4b4b4]
Tff7b72if Te6edf3content Tff7b72and Tff7b72not Te6edf3contentTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3content Tff7b72+Tff7b72= Ta5d6ff"Tffea00\nTa5d6ff"
Tff7b72return Te6edf3content Tff7b72+ Tb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff" Tff7b72if Te6edf3content Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4) Tff7b72+ Te6edf3projection
Tff7b72def Td2a8ffremove_stale_sectionsTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3activeTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3init_optionsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4, Te6edf3stateTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3paths Tff7b72= Tb4b4b4{Te6edf3root Tff7b72/ Ta5d6ff"Ta5d6ffAGENTS.mdTa5d6ff"Tb4b4b4}
Tff7b72for Te6edf3value Tff7b72in Te6edf3CONTEXT_FILESTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3target Tff7b72= Te6edf3safe_project_pathTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3valueTb4b4b4)
Tff7b72if Te6edf3target Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3pathsTff7b72.Td2a8ffaddTb4b4b4(Te6edf3targetTb4b4b4)
Te6edf3init_target Tff7b72= Te6edf3safe_project_pathTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3init_optionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcontext_fileTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3init_target Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3pathsTff7b72.Td2a8ffaddTb4b4b4(Te6edf3init_targetTb4b4b4)
Tff7b72for Te6edf3path Tff7b72in Te6edf3pathsTb4b4b4:
Tff7b72if Te6edf3same_pathTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3activeTb4b4b4)Tb4b4b4:
Tff7b72continue
Te6edf3remove_sectionTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72def Td2a8ffremove_sectionTb4b4b4(Te6edf3pathTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Te6edf3pathTff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return
Te6edf3content Tff7b72= Te6edf3pathTff7b72.Td2a8ffread_textTb4b4b4(Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8-sigTa5d6ff"Tb4b4b4)
Te6edf3start Tff7b72= Te6edf3contentTff7b72.Td2a8fffindTb4b4b4(Te6edf3MARKER_STARTTb4b4b4)
Te6edf3end Tff7b72= Te6edf3contentTff7b72.Td2a8fffindTb4b4b4(Te6edf3MARKER_ENDTb4b4b4, Te6edf3start Tff7b72if Te6edf3start Tff7b72!= Tff7b72-T79c0ff1 Tff7b72else T79c0ff0Tb4b4b4)
Tff7b72if Te6edf3start Tff7b72== Tff7b72-T79c0ff1 Tff7b72or Te6edf3end Tff7b72== Tff7b72-T79c0ff1 Tff7b72or Te6edf3end Tff7b72<Tff7b72= Te6edf3startTb4b4b4:
Tff7b72return
Te6edf3removal_end Tff7b72= Te6edf3end Tff7b72+ Tffa657lenTb4b4b4(Te6edf3MARKER_ENDTb4b4b4)
Tff7b72if Te6edf3removal_end Tff7b72< Tffa657lenTb4b4b4(Te6edf3contentTb4b4b4) Tff7b72and Te6edf3contentTb4b4b4[Te6edf3removal_endTb4b4b4] Tff7b72== Ta5d6ff"Tffea00\rTa5d6ff"Tb4b4b4:
Te6edf3removal_end Tff7b72+Tff7b72= T79c0ff1
Tff7b72if Te6edf3removal_end Tff7b72< Tffa657lenTb4b4b4(Te6edf3contentTb4b4b4) Tff7b72and Te6edf3contentTb4b4b4[Te6edf3removal_endTb4b4b4] Tff7b72== Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4:
Te6edf3removal_end Tff7b72+Tff7b72= T79c0ff1
Te6edf3removal_start Tff7b72= Te6edf3start
Tff7b72if Te6edf3removal_start Tff7b72> T79c0ff1 Tff7b72and Te6edf3contentTb4b4b4[Te6edf3removal_start Tff7b72- T79c0ff1Tb4b4b4] Tff7b72== Ta5d6ff"Tffea00\nTa5d6ff" Tff7b72and Te6edf3contentTb4b4b4[Te6edf3removal_start Tff7b72- T79c0ff2Tb4b4b4] Tff7b72== Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4:
Te6edf3removal_start Tff7b72-Tff7b72= T79c0ff1
Te6edf3updated Tff7b72= Te6edf3normalize_newlinesTb4b4b4(Te6edf3contentTb4b4b4[Tb4b4b4:Te6edf3removal_startTb4b4b4] Tff7b72+ Te6edf3contentTb4b4b4[Te6edf3removal_endTb4b4b4:Tb4b4b4]Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3updatedTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72or Tb4b4b4(Te6edf3pathTff7b72.Td2a8ffsuffix Tff7b72== Ta5d6ff"Ta5d6ff.mdcTa5d6ff" Tff7b72and Te6edf3reTff7b72.Td2a8ffmatchTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff^---Ta5d6ff\Ta5d6ffn.*?Ta5d6ff\Ta5d6ffn---Ta5d6ff\Ta5d6ffs*$Ta5d6ff"Tb4b4b4, Te6edf3updatedTb4b4b4, Te6edf3reTff7b72.Td2a8ffDOTALLTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3pathTff7b72.Td2a8ffunlinkTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3pathTff7b72.Td2a8ffwrite_textTb4b4b4(Te6edf3updatedTb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffgovernance_sourceTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3targetTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657tupleTb4b4b4[Tffa657strTb4b4b4, Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3managed Tff7b72= Te6edf3extract_managed_sectionTb4b4b4(Te6edf3targetTb4b4b4)
Tff7b72if Te6edf3managedTb4b4b4:
Tff7b72return Te6edf3managedTb4b4b4, Ta5d6ff"Ta5d6ffactive generated sectionTa5d6ff"
Te6edf3memory Tff7b72= Te6edf3root Tff7b72/ Te6edf3MEMORY_PATH
Tff7b72tryTb4b4b4:
Tff7b72return Te6edf3normalize_newlinesTb4b4b4(Te6edf3memoryTff7b72.Td2a8ffread_textTb4b4b4(Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8-sigTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffinitialization cacheTa5d6ff"
Tff7b72except Tb4b4b4(Tf85149OSErrorTb4b4b4, Tf85149UnicodeDecodeErrorTb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbuilt-in defaultsTa5d6ff"
Tff7b72def Td2a8ffsection_or_defaultTb4b4b4(Te6edf3source_textTb4b4b4: Tffa657strTb4b4b4, Te6edf3headingsTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4, Te6edf3defaultTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Tff7b72for Te6edf3heading Tff7b72in Te6edf3headingsTb4b4b4:
Te6edf3section Tff7b72= Te6edf3extract_section_from_textTb4b4b4(Te6edf3source_textTb4b4b4, Te6edf3headingTb4b4b4)
Tff7b72if Te6edf3sectionTb4b4b4:
Tff7b72return Te6edf3section
Tff7b72return Te6edf3default
Tff7b72def Td2a8ffrepository_evidence_defaultTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Tff7b72return Tb4b4b4[Ta5d6ff"Ta5d6ff- none capturedTa5d6ff"Tb4b4b4]
Tff7b72def Td2a8ffrepository_areas_defaultTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Tff7b72return Tb4b4b4[Ta5d6ff"Ta5d6ff- none detectedTa5d6ff"Tb4b4b4]
Tff7b72def Td2a8ffdirectory_governance_defaultTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Tff7b72return Tb4b4b4[
Ta5d6ff"Ta5d6ff- Responsibility: one primary purpose per directory.Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Depth: 2.Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Coverage: include visible, hidden, generated, cache, config/env, tool, and agent directories.Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Mixed concerns: follow existing repo convention or split responsibility.Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Change impact: review linked code, tests, docs, config/env, data, assets, generated files, and tool outputs; update only when in scope and authorized.Ta5d6ff"Tb4b4b4,
Tb4b4b4]
Tff7b72def Td2a8ffdevelopment_commands_defaultTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Tff7b72return Tb4b4b4[Ta5d6ff"Ta5d6ff- none recordedTa5d6ff"Tb4b4b4]
Tff7b72def Td2a8ffextract_sectionTb4b4b4(Te6edf3pathTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3headingTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Te6edf3extract_section_from_textTb4b4b4(Te6edf3pathTff7b72.Td2a8ffread_textTb4b4b4(Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8-sigTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3headingTb4b4b4)
Tff7b72except Tb4b4b4(Tf85149OSErrorTb4b4b4, Tf85149UnicodeDecodeErrorTb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffextract_managed_sectionTb4b4b4(Te6edf3pathTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3content Tff7b72= Te6edf3normalize_newlinesTb4b4b4(Te6edf3pathTff7b72.Td2a8ffread_textTb4b4b4(Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8-sigTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72except Tb4b4b4(Tf85149OSErrorTb4b4b4, Tf85149UnicodeDecodeErrorTb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff"
Te6edf3start Tff7b72= Te6edf3contentTff7b72.Td2a8fffindTb4b4b4(Te6edf3MARKER_STARTTb4b4b4)
Te6edf3end Tff7b72= Te6edf3contentTff7b72.Td2a8fffindTb4b4b4(Te6edf3MARKER_ENDTb4b4b4, Te6edf3start Tff7b72if Te6edf3start Tff7b72!= Tff7b72-T79c0ff1 Tff7b72else T79c0ff0Tb4b4b4)
Tff7b72if Te6edf3start Tff7b72== Tff7b72-T79c0ff1 Tff7b72or Te6edf3end Tff7b72== Tff7b72-T79c0ff1 Tff7b72or Te6edf3end Tff7b72<Tff7b72= Te6edf3startTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff"
Tff7b72return Te6edf3contentTb4b4b4[Te6edf3start Tff7b72+ Tffa657lenTb4b4b4(Te6edf3MARKER_STARTTb4b4b4) Tb4b4b4: Te6edf3endTb4b4b4]
Tff7b72def Td2a8ffextract_section_from_textTb4b4b4(Te6edf3textTb4b4b4: Tffa657strTb4b4b4, Te6edf3headingTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3lines Tff7b72= Te6edf3normalize_newlinesTb4b4b4(Te6edf3textTb4b4b4)Tff7b72.Td2a8ffsplitlinesTb4b4b4(Tb4b4b4)
Te6edf3capture Tff7b72= Tff7b72False
Te6edf3resultTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3line Tff7b72in Te6edf3linesTb4b4b4:
Tff7b72if Te6edf3lineTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72== Te6edf3headingTb4b4b4:
Te6edf3capture Tff7b72= Tff7b72True
Tff7b72continue
Tff7b72if Te6edf3capture Tff7b72and Te6edf3lineTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ff## Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72break
Tff7b72if Te6edf3capture Tff7b72and Te6edf3lineTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Te6edf3lineTb4b4b4)
Tff7b72return Te6edf3result
Tff7b72def Td2a8ffprojection_styleTb4b4b4(Te6edf3pathTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3rel_path Tff7b72= Te6edf3pathTff7b72.Td2a8ffas_posixTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3rel_pathTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ff.github/copilot-instructions.mdTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffcopilotTa5d6ff"
Tff7b72if Te6edf3pathTff7b72.Td2a8ffsuffix Tff7b72== Ta5d6ff"Ta5d6ff.mdcTa5d6ff" Tff7b72or Ta5d6ff"Ta5d6ff/rules/Ta5d6ff" Tff7b72in Te6edf3rel_pathTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffruleTa5d6ff"
Tff7b72return Ta5d6ff"Ta5d6ffagentTa5d6ff"
Tff7b72def Td2a8ffstyle_leadTb4b4b4(Te6edf3styleTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72if Te6edf3style Tff7b72== Ta5d6ff"Ta5d6ffcopilotTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffUse these as concise Copilot custom instructions for this repository.Ta5d6ff"
Tff7b72if Te6edf3style Tff7b72== Ta5d6ff"Ta5d6ffruleTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffApply these repository rules before planning, editing, or using tools.Ta5d6ff"
Tff7b72return Ta5d6ff"Ta5d6ffFollow these repository instructions when working in this project.Ta5d6ff"
Tff7b72def Td2a8ffwrite_boundary_defaultTb4b4b4(Te6edf3styleTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Tff7b72if Te6edf3style Tff7b72== Ta5d6ff"Ta5d6ffruleTa5d6ff"Tb4b4b4:
Tff7b72return Tb4b4b4[
Ta5d6ff"Ta5d6ff- Stay inside the active task scope.Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Preserve user-authored edits.Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Preserve managed markers verbatim: `<!-- SPECKIT GOVERNANCE START -->` and `<!-- SPECKIT GOVERNANCE END -->`.Ta5d6ff"Tb4b4b4,
Tb4b4b4]
Tff7b72return Tb4b4b4[
Ta5d6ff"Ta5d6ff- Keep edits inside the active task scope and preserve user changes.Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Preserve managed markers verbatim: `<!-- SPECKIT GOVERNANCE START -->` and `<!-- SPECKIT GOVERNANCE END -->`.Ta5d6ff"Tb4b4b4,
Tb4b4b4]
Tff7b72def Td2a8ffmcp_defaultTb4b4b4(Te6edf3styleTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Tff7b72return Tb4b4b4[Ta5d6ff"Ta5d6ff- Read-only unless the user authorizes mutation.Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff- External writes: target, action, expected effect.Ta5d6ff"Tb4b4b4]
Tff7b72def Td2a8ffskill_defaultTb4b4b4(Te6edf3styleTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Tff7b72return Tb4b4b4[
Ta5d6ff"Ta5d6ff- Use active skill `SKILL.md`.Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Write scope: declared skill paths only.Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff- Repository-local skill specs should declare purpose, trigger, allowed read paths, allowed write paths, forbidden paths, outputs, and validation command.Ta5d6ff"Tb4b4b4,
Tb4b4b4]
Tff7b72def Td2a8ffhandoff_defaultTb4b4b4(Te6edf3styleTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Tff7b72return Tb4b4b4[Ta5d6ff"Ta5d6ff- changed filesTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff- commands runTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff- validation resultTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff- unresolved risksTa5d6ff"Tb4b4b4]
Tff7b72def Td2a8ffscan_feature_specsTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3specs Tff7b72= Te6edf3root Tff7b72/ Ta5d6ff"Ta5d6ffspecsTa5d6ff"
Tff7b72if Tff7b72not Te6edf3specsTff7b72.Td2a8ffis_dirTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffnoneTa5d6ff"
Te6edf3entries Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3feature Tff7b72in Tffa657sortedTb4b4b4(Te6edf3path Tff7b72for Te6edf3path Tff7b72in Te6edf3specsTff7b72.Td2a8ffiterdirTb4b4b4(Tb4b4b4) Tff7b72if Te6edf3pathTff7b72.Td2a8ffis_dirTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3statuses Tff7b72= Tb4b4b4[Ta5d6fffTa5d6ff"Tffd700{Te6edf3nameTffd700}Ta5d6ff:Tffd700{Ta5d6ff'Ta5d6ffpresentTa5d6ff' Tff7b72if Tb4b4b4(Te6edf3feature Tff7b72/ Te6edf3nameTb4b4b4)Tff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4) Tff7b72else Ta5d6ff'Ta5d6ffmissingTa5d6ff'Tffd700}Ta5d6ff" Tff7b72for Te6edf3name Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ffspec.mdTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffplan.mdTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fftasks.mdTa5d6ff"Tb4b4b4)Tb4b4b4]
Te6edf3entriesTff7b72.Td2a8ffappendTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3relTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3featureTb4b4b4)Tffd700}Ta5d6ff (Tffd700{Ta5d6ff'Ta5d6ff, Ta5d6ff'Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3statusesTb4b4b4)Tffd700}Ta5d6ff)Ta5d6ff"Tb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ff, Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3entriesTb4b4b4) Tff7b72if Te6edf3entries Tff7b72else Ta5d6ff"Ta5d6ffnoneTa5d6ff"
Tff7b72def Td2a8ffscan_skillsTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Tff7b72return Tffa657sortedTb4b4b4(Te6edf3relTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3pathTb4b4b4) Tff7b72for Te6edf3path Tff7b72in Te6edf3rootTff7b72.Td2a8ffrglobTb4b4b4(Ta5d6ff"Ta5d6ffSKILL.mdTa5d6ff"Tb4b4b4) Tff7b72if Tff7b72not Te6edf3ignoredTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffscan_mcp_configsTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3names Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ff.mcp.jsonTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmcp.jsonTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmcp.ymlTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmcp.yamlTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmcp.config.jsonTa5d6ff"Tb4b4b4}
Tff7b72return Tffa657sortedTb4b4b4(
Te6edf3relTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3pathTb4b4b4)
Tff7b72for Te6edf3path Tff7b72in Te6edf3rootTff7b72.Td2a8ffrglobTb4b4b4(Ta5d6ff"Ta5d6ff*Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3pathTff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4) Tff7b72and Tff7b72not Te6edf3ignoredTb4b4b4(Te6edf3pathTb4b4b4) Tff7b72and Tb4b4b4(Te6edf3pathTff7b72.Td2a8ffname Tff7b72in Te6edf3names Tff7b72or Ta5d6ff"Ta5d6ffmcpTa5d6ff" Tff7b72in Te6edf3pathTff7b72.Td2a8ffnameTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4)
Tff7b72def Td2a8ffignoredTb4b4b4(Te6edf3pathTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72return Tffa657anyTb4b4b4(Te6edf3part Tff7b72in Tb4b4b4{Ta5d6ff"Ta5d6ff.gitTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff__pycache__Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff.venvTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnode_modulesTa5d6ff"Tb4b4b4} Tff7b72for Te6edf3part Tff7b72in Te6edf3pathTff7b72.Td2a8ffpartsTb4b4b4)
Tff7b72def Td2a8ffextensions_statusTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3path Tff7b72= Te6edf3root Tff7b72/ Ta5d6ff"Ta5d6ff.specify/extensions.ymlTa5d6ff"
Tff7b72if Tff7b72not Te6edf3pathTff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffmissingTa5d6ff"
Tff7b72return Ta5d6ff"Ta5d6ffpresentTa5d6ff"
Tff7b72def Td2a8ffexistsTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3valueTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffpresentTa5d6ff" Tff7b72if Tb4b4b4(Te6edf3root Tff7b72/ Te6edf3valueTb4b4b4)Tff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4) Tff7b72else Ta5d6ff"Ta5d6ffmissingTa5d6ff"
Tff7b72def Td2a8ffensure_mdc_frontmatterTb4b4b4(Te6edf3contentTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3stripped Tff7b72= Te6edf3contentTff7b72.Td2a8fflstripTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3strippedTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ff---Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff---Tffea00\nTa5d6ffalwaysApply: trueTffea00\nTa5d6ff---Tffea00\nTffea00\nTa5d6ff" Tff7b72+ Te6edf3content
Te6edf3match Tff7b72= Te6edf3reTff7b72.Td2a8ffmatchTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff^(---[ Ta5d6ff\Ta5d6fft]*Ta5d6ff\Ta5d6ffn)(.*?)(Ta5d6ff\Ta5d6ffn---[ Ta5d6ff\Ta5d6fft]*)(Ta5d6ff\Ta5d6ffn|$)(.*)Ta5d6ff"Tb4b4b4, Te6edf3strippedTb4b4b4, Te6edf3reTff7b72.Td2a8ffDOTALLTb4b4b4)
Tff7b72if Tff7b72not Te6edf3matchTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff---Tffea00\nTa5d6ffalwaysApply: trueTffea00\nTa5d6ff---Tffea00\nTffea00\nTa5d6ff" Tff7b72+ Te6edf3content
Te6edf3openingTb4b4b4, Te6edf3frontmatterTb4b4b4, Te6edf3closingTb4b4b4, Te6edf3sepTb4b4b4, Te6edf3rest Tff7b72= Te6edf3matchTff7b72.Td2a8ffgroupsTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3reTff7b72.Td2a8ffsearchTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff(?m)^[ Ta5d6ff\Ta5d6fft]*alwaysApply[ Ta5d6ff\Ta5d6fft]*:[ Ta5d6ff\Ta5d6fft]*true[ Ta5d6ff\Ta5d6fft]*$Ta5d6ff"Tb4b4b4, Te6edf3frontmatterTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3content
Tff7b72if Te6edf3reTff7b72.Td2a8ffsearchTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff(?m)^[ Ta5d6ff\Ta5d6fft]*alwaysApply[ Ta5d6ff\Ta5d6fft]*:Ta5d6ff"Tb4b4b4, Te6edf3frontmatterTb4b4b4)Tb4b4b4:
Te6edf3frontmatter Tff7b72= Te6edf3reTff7b72.Td2a8ffsubTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff(?m)^([ Ta5d6ff\Ta5d6fft]*)alwaysApply[ Ta5d6ff\Ta5d6fft]*:.*$Ta5d6ff"Tb4b4b4, Ta5d6ffrTa5d6ff"Ta5d6ff\Ta5d6ff1alwaysApply: trueTa5d6ff"Tb4b4b4, Te6edf3frontmatterTb4b4b4, Te6edf3countTff7b72=T79c0ff1Tb4b4b4)
Tff7b72elif Te6edf3frontmatterTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3frontmatter Tff7b72+Tff7b72= Ta5d6ff"Tffea00\nTa5d6ffalwaysApply: trueTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3frontmatter Tff7b72= Ta5d6ff"Ta5d6ffalwaysApply: trueTa5d6ff"
Tff7b72return Ta5d6fffTa5d6ff"Tffd700{Te6edf3openingTffd700}Tffd700{Te6edf3frontmatterTffd700}Tffd700{Te6edf3closingTffd700}Tffd700{Te6edf3sepTffd700}Tffd700{Te6edf3restTffd700}Ta5d6ff"
Tff7b72def Td2a8ffsame_pathTb4b4b4(Te6edf3leftTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3rightTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Te6edf3leftTff7b72.Td2a8ffresolveTb4b4b4(Te6edf3strictTff7b72=Tff7b72FalseTb4b4b4) Tff7b72== Te6edf3rightTff7b72.Td2a8ffresolveTb4b4b4(Te6edf3strictTff7b72=Tff7b72FalseTb4b4b4)
Tff7b72except Tf85149OSErrorTb4b4b4:
Tff7b72return Te6edf3leftTff7b72.Td2a8ffabsoluteTb4b4b4(Tb4b4b4) Tff7b72== Te6edf3rightTff7b72.Td2a8ffabsoluteTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffrelTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3pathTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Te6edf3pathTff7b72.Td2a8ffrelative_toTb4b4b4(Te6edf3rootTb4b4b4)Tff7b72.Td2a8ffas_posixTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ValueErrorTb4b4b4:
Tff7b72return Te6edf3pathTff7b72.Td2a8ffas_posixTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffnormalize_newlinesTb4b4b4(Te6edf3contentTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Te6edf3contentTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Tffea00\rTffea00\nTa5d6ff"Tb4b4b4, Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Tffea00\rTa5d6ff"Tb4b4b4, Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Tff7b72raise Tf85149SystemExitTb4b4b4(Te6edf3mainTb4b4b4(Tb4b4b4)Tb4b4b4)
Served by rngit 1.5.2 - Generated in 0.31s